﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using BLL.IServiceImplementation;
using BLL.ServiceImplementation;
using BLL.DTO.Propiedad;
using BLL.DTO.HelperDTO.Pagination;
using Web.Helper;
using BLL.DTO.Empresa;
using BLL.DTO.Comuna;

namespace Web.Controllers.PublicaTuPropiedadController
{
    public class SolicitudController : BaseController
    {
        //Constructor
        private readonly IEmpresaSvc empresaSvc;
        private readonly IComunaSvc comunaSvc;
        private readonly PageRequestDTO pageDTO;
        private readonly EmpresaDTO empresaDTO;

        public SolicitudController()
        {
            pageDTO = new PageRequestDTO();
            empresaDTO = new EmpresaDTO();
            empresaSvc = new EmpresaSvcImpl();
            comunaSvc = new ComunaSvcImpl();
        }

        public ActionResult EnviarSolicitud()
        {
            return View();
        }

        public PartialViewResult ListarEmpresas()
        {
            List<EmpresaDTO> listaEmpresa = empresaSvc.GetEmpresas(pageDTO);
            GetComunaById(listaEmpresa);

            return PartialView("ListarEmpresas", listaEmpresa);
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public PartialViewResult ListarEmpresas_submit(string listaEmpresa)
        {
            List<int> rutEmpresas = listaEmpresa.Split(',').Select(int.Parse).ToList();
            List<EmpresaDTO> empresas = empresaSvc.GetEmpresas(pageDTO).Where(e => rutEmpresas.Contains(e.rut_Empresa)).ToList();

            return PartialView("EmpresasSeleccionadas", empresas);
        }

        #region Métodos Génericos
        public List<EmpresaDTO> GetComunaById(List<EmpresaDTO> listaEmpresa)
        {
            List<ComunaDTO> listaComuna = new List<ComunaDTO>();
            int cantidad = listaEmpresa.Count();

            for (int i = 0; i < cantidad; i++)
            {
                if (listaEmpresa.ElementAt(i).codigo_Comuna != 0)
                {
                    listaComuna = comunaSvc.GetAllByIdComuna(listaEmpresa.ElementAt(i).codigo_Comuna);
                    listaEmpresa.ElementAt(i).direccionFinal = listaEmpresa.ElementAt(0).direccion_Empresa + " n° " + listaEmpresa.ElementAt(0).numero_Empresa;
                    listaEmpresa.ElementAt(i).nombreComuna = listaComuna.ElementAt(0).nombre_Comuna;
                }
            }

            return listaEmpresa;
        }
        #endregion
    }
}
